/**
 * Copyright (c) 2020 Coder League
 * All rights reserved.
 *
 * File：UserDaoExtension.java
 * History:
 *         2020年12月19日: Initially created, Chrise.
 */
package club.coderleague.cfss.dao.extension;

import club.coderleague.cfss.domain.beans.PagingParameters;
import club.coderleague.cfss.domain.beans.UserSession;
import club.coderleague.cfss.domain.beans.UsersExtension;
import club.coderleague.cfss.domain.entities.Users;
import club.coderleague.data.jpa.domain.Page;
import club.coderleague.data.jpa.repository.DataRepositoryExtension;

/**
 * 用户数据访问对象扩展。
 * @author Chrise
 */
public interface UserDaoExtension extends DataRepositoryExtension {
	/**
	 * 查询管理员。
	 * @author Chrise 2020年12月19日
	 * @return 管理员对象。
	 */
	Users queryAdministrator();
	
	/**
	 * 检查管理员用户是否存在。
	 * @author Chrise 2020年12月19日
	 * @return 管理员用户存在时返回true，否则返回false。
	 */
	boolean isAdministratorExists();
	
	/**
	 * 查询用户。
	 * @author Chrise 2020年12月19日
	 * @param loginname 登录名。
	 * @param isphone 是否手机号。
	 * @return 用户对象。
	 */
	Users queryUser(String loginname, boolean isphone);
	
	/**
	 * 查询用户会话。
	 * @author Chrise 2020年12月19日
	 * @param loginname 登录名。
	 * @param isphone 是否手机号。
	 * @return 用户会话对象。
	 */
	UserSession queryUserSession(String loginname, boolean isphone);
	
	/**
	 * 查询用户会话。
	 * @author Chrise 2020年12月22日
	 * @param userid 用户标识。
	 * @return 用户会话对象。
	 */
	UserSession queryUserSession(long userid);
	
	/**
	 * 分页查询用户。
	 * @author Chrise 2020年12月21日
	 * @param pagingparameters 分页参数。
	 * @param isrecycle 是否回收站。
	 * @param keyword 关键字。
	 * @return 分页用户数据。
	 */
	Page<UsersExtension> findPageByParamsMap(PagingParameters pagingparameters, boolean isrecycle, String keyword);
	
	/**
	 * 根据用户主键查询用户。
	 * @author Chrise 2020年12月21日
	 * @param entityid 用户主键。
	 * @return 用户数据。
	 */
	UsersExtension findExtensionByEntityid(Long entityid);
	
	/**
	 * 根据登录名或用户电话查询除指定主键外是否存在。
	 * @author Chrise 2020年12月21日
	 * @param loginname 登录名。
	 * @param userphone 用户电话。
	 * @param entityid 用户主键。
	 * @return 查重结果。
	 */
	boolean existsByLoginnameOrUserphoneNotEntityid(String loginname, String userphone, Long entityid);
	
	/**
	 * 查询用户会话。
	 * @author Chrise 2020年12月27日
	 * @param userid 用户标识。
	 * @param isSupplier 是否供应商，false为网吧。
	 * @return 用户会话对象。
	 */
	UserSession queryMobileUserSession(long userid, boolean isSupplier);
	
	/**
	 * 查询用户会话。
	 * @author Chrise 2020年12月23日
	 * @param openid 开放标识。
	 * @param isSupplier 是否供应商，false为网吧。
	 * @return 用户会话对象。
	 */
	UserSession queryMobileUserSession(String openid, boolean isSupplier);
}
